home *** CD-ROM | disk | FTP | other *** search
/ Aminet 23 / Aminet 23 (1998)(GTI - Schatztruhe)[!][Feb 1998].iso / Aminet / disk / misc / TransADF.lha / Source / read_disk.c < prev    next >
C/C++ Source or Header  |  1997-12-03  |  3KB  |  94 lines

  1. #include <exec/types.h>
  2. #include <exec/memory.h>
  3. #include <dos/dos.h>
  4. #include <clib/exec_protos.h>
  5. #include <clib/dos_protos.h>
  6.  
  7. #include "read_disk.h"
  8. #include "main.h"
  9. #include "td.h"
  10. #include "util.h"
  11. #include "errors.h"
  12.  
  13.  
  14. #define RD_TBTRACKS 1                           /* Tracks in rd_TrackBuf */
  15. #define RD_TBSIZE   (RD_TBTRACKS * TRACK_SIZE)  /* Bytes in rd_TrackBuf  */
  16.  
  17. UBYTE *rd_TrackBuf;    /* Our input buffer - reads from disk. */
  18.  
  19.  
  20. /*
  21. ** Read a disk into a file.
  22. ** Expects all fields of adfPkt to be set.
  23. */
  24. void readDisk (struct ADF_Packet *adfPkt)
  25. {
  26.   BYTE TDError;
  27.   LONG DOSError, RWSize;
  28.   int i;
  29.   
  30.   
  31.   /* Output info header */
  32.   FPrintf (StdErr, "Reading from TrackDisk Unit %ld (DF%ld:) to %s.\n",
  33.                    adfPkt->diskUnit,
  34.                    adfPkt->diskUnit,
  35.                    adfPkt->ADFileName);
  36.   
  37.   FPrintf (StdErr, "Starting at track %ld, Ending at track %ld.\n",
  38.                    (adfPkt->startTrack>>1),
  39.                    (adfPkt->endTrack>>1));
  40.   
  41.   /* Allocate track buffer */
  42.   rd_TrackBuf = (UBYTE *) AllocVec (RD_TBSIZE, MEMF_CLEAR);
  43.   if (!rd_TrackBuf)
  44.   {
  45.     /* Out of memory! */
  46.     FPrintf (StdErr, "%s: Out of memory.\n", ProgName);
  47.     cleanExit (RETURN_FAIL, ERROR_NO_FREE_STORE);
  48.   }
  49.   
  50.   /* Start reading */
  51.   for (i = adfPkt->startTrack; i <= adfPkt->endTrack; i++)
  52.   {
  53.     /* Check for Control-C break */
  54.     if (CTRL_C)
  55.     {
  56.       FPutC (StdOut, '\n');
  57.       FPrintf (StdErr, "%s - %s\n", breakText, ProgName);
  58.       cleanExit (RETURN_WARN, NULL);
  59.     }
  60.     
  61.     /* Update progress information */
  62.     FPuts (StdOut, "\rReading ");
  63.     FPUTS_TS (i, StdOut);
  64.     Flush (StdOut);
  65.     
  66.     /* Fill the buffer from disk */
  67.     TDError = readTrack (rd_TrackBuf, RD_TBTRACKS, i, adfPkt->diskReq);
  68.     if (TDError)
  69.     {
  70.       FPutC (StdOut, '\n');
  71.       FPrintf (StdErr, "%s: Error reading from DF%ld: - ", ProgName,
  72.                                                            adfPkt->diskUnit);
  73.       reportTDError (TDError);
  74.       cleanExit (RETURN_ERROR, NULL);
  75.     }
  76.     
  77.     /* Write the buffer to the output file */
  78.     RWSize = Write (adfPkt->ADFile, rd_TrackBuf, RD_TBSIZE);
  79.     if (RWSize != RD_TBSIZE)
  80.     {
  81.       DOSError = IoErr();
  82.       
  83.       FPutC (StdOut, '\n');
  84.       FPrintf (StdErr, "%s: Error writing to %s - ",ProgName,
  85.                                                     adfPkt->ADFileName);
  86.       reportDOSError (DOSError);
  87.       cleanExit (RETURN_ERROR, DOSError);
  88.     }
  89.   }
  90.   
  91.   /* Free buffer */
  92.   FreeVec (rd_TrackBuf); rd_TrackBuf = NULL;
  93. }
  94.